package com.sdkj.recruit.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.sdkj.recruit.model.ResultData;
import com.sdkj.recruit.model.Resume;
import com.sdkj.recruit.model.SmsCode;
import com.sdkj.recruit.model.User;
import com.sdkj.recruit.model.WeixinConfig;
import com.sdkj.recruit.vo.CompanyVo;
import com.sdkj.recruit.vo.EducationalExperienceVo;
import com.sdkj.recruit.vo.MenuVo;
import com.sdkj.recruit.vo.ResumeVo;
import com.sdkj.recruit.vo.UserLabelVo;
import com.sdkj.recruit.vo.UserVo;
import com.sdkj.recruit.vo.WorkExperienceVo;

public interface IUserService {

	/**
	 * 登陆
	 * 
	 * @return
	 */
	UserVo login();

	/**
	 * 根据名称查询用户
	 * 
	 * @param userName
	 * @return
	 */
	User queryUserByName(String userName);

	/**
	 * 获取用户菜单
	 * 
	 * @param user
	 * @return
	 */
	List<MenuVo> getUserMeuns(User user);

	/**
	 * 保存用户
	 * 
	 * @param list
	 */
	void saveUsers(List<User> list);

	/**
	 * 删除用户
	 * 
	 * @param userId
	 */
	void deleteUserById(String userId);

	/**
	 * 删除用户登陆信息
	 * 
	 * @param userId
	 */
	void cleanUserLoginInfo(String userId);

	/**
	 * 更新登陆信息
	 * 
	 * @param accessToken
	 * @param lastLoginTime
	 * @param expireTime
	 */
	void updateUserLoginInfo(String accessToken, Date lastLoginTime, long expireTime, String userId);

	/**
	 * 查询用户
	 * 
	 * @param userId 用户id
	 * @return
	 */
	UserVo queryUserById(String userId);

	/**
	 * 修改密码
	 * 
	 * @param userId
	 * @param createNewpassword
	 */
	void updatePassword(String userId, String createNewpassword);

	/**
	 * 根据手机号查询用户
	 * 
	 * @param mobile
	 * @return
	 */
	User queryUserByPhone(String mobile);

	/**
	 * 用户注册
	 * 
	 * @param user
	 * @return
	 */
	ResultData<Object> register(User user);

	/**
	 * 更新用户信息
	 * 
	 * @param userId
	 * @param property
	 */
	void updateUserProperty(String userId, Map<String, Object> property);

	List<UserVo> queryUserList(int pageNo, int pageSize, String keyWord);

	long queryAllUserCount(String keyWord);

	void deleteUser(String userId);

	void updateUserByUserId(String userId, Map<String, Object> map);

	void saveUser(UserVo userVo);

	User queryUserByToken(String token);

	UserVo queryUserByEmCode(String emCode);

	void saveSmsInfo(SmsCode sms);

	SmsCode querySms(String mobile, int codeType);

	/**
	 * 保存简历
	 * 
	 * @param resumeVo
	 * @return
	 */
	ResultData<Object> saveResume(ResumeVo resumeVo);

	/**
	 * 修改简历
	 * 
	 * @param resumeVo
	 * @return
	 */
	ResultData<Object> updateResume(ResumeVo resumeVo);

	/**
	 * 删除简历
	 * 
	 * @param resumeId
	 * @return
	 */
	ResultData<Object> deleteResume(String resumeId);

	/**
	 * 获取简历详情
	 * 
	 * @param resumeId
	 * @return
	 */
	ResultData<Object> queryResume(String resumeId);

	/**
	 * 新增单条工作经历
	 * 
	 * @param workExperienceVo
	 * @return
	 */
	ResultData<Object> addWorkExperience(WorkExperienceVo workExperienceVo);

	/**
	 * 新增单条教育经历
	 * 
	 * @param educationalExperienceVo
	 * @return
	 */
	ResultData<Object> addeducationalExperience(EducationalExperienceVo educationalExperienceVo);

	/**
	 * 更新单条工作经历
	 * 
	 * @param workExperienceVo
	 * @return
	 */
	ResultData<Object> updateWorkExperience(WorkExperienceVo workExperienceVo);

	/**
	 * 更新单条教育经历
	 * 
	 * @param educationalExperienceVo
	 * @return
	 */
	ResultData<Object> updateEducationalExperience(EducationalExperienceVo educationalExperienceVo);

	/**
	 * 删除单条教育经历
	 * 
	 * @param id
	 * @return
	 */
	ResultData<Object> deleteEducationalExperience(String id);

	/**
	 * 删除单条工作经历
	 * 
	 * @param id
	 * @return
	 */
	ResultData<Object> deleteWorkExperience(String id);

	/**
	 * 发送简历
	 * 
	 * @param userId
	 * @param resumeId
	 * @return
	 */
	ResultData<Object> sendResume(String userId, String resumeId);

	/**
	 * 获取用户简历，目前支持单个简历
	 * @param userId
	 * @return
	 */
	Resume queryResumeByUserId(String userId);

	List<MenuVo> getUserMeuns(CompanyVo companyVo);

	/**
	 * 企业投递简历
	 * @param userId
	 * @param resumeId
	 * @param companyId
	 * @return
	 */
	ResultData<Object> sendResume(String userId, String resumeId, String companyId,String positionId);

	/**
	 * 保存用户标签
	 * @param labelVo
	 * @return
	 */
	ResultData<Object> saveUserLabel(UserLabelVo labelVo);

	/**
	 * 删除用户标签
	 * @param id
	 * @return
	 */
	ResultData<Object> deleteLabel(String id);

	/**
	 * 验证是否已经授权，微信小程序
	 * @param uniqueId
	 * @return
	 */
	WeixinConfig queryUserIsAuth(String uniqueId);
}
